def fibonacci_recursive(n):
    if n <= 1:
        return n
    return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
#
#
# start_time = time.time()
# max_fib = fibonacci_recursive(42)
# end_time = time.time()
# print(end_time - start_time)

import time
import sys
# sys.set_int_max_str_digits(1000000)  # 增加限制

def calculate_max_fibonacci_iterative(timeout=30):
    """
    计算严格30秒内迭代能计算的最大斐波那契数及相关信息。

    参数：
    timeout (int): 最大允许时间（单位：秒），默认30秒。

    返回：
    tuple: (最大序号, 对应的斐波那契数值, 当前用时, 计算下一个数的用时)
    """
    n = 0
    a, b = 0, 1  # 初始两个斐波那契数
    start_time = time.time()
    elapsed_time = 0

    # 迭代计算斐波那契数，直到超时
    while True:
        current_time = time.time()
        elapsed_time = current_time - start_time
        if elapsed_time > timeout:
            break
        a, b = b, a + b
        n += 1

    max_fib_index = n - 1
    max_fib_value = a

    # 测量计算下一个斐波那契数的时间
    start_time_next = time.time()
    next_fib_value = a + b
    next_fib_time = time.time() - start_time_next

    return max_fib_index, max_fib_value, elapsed_time,  next_fib_time


def calculate_max_fibonacci():
    start_time = time.time()  # 开始计时
    timeout = 30  # 最大计算时间（秒）

    n = 0  # 斐波那契数的索引
    prev_fib = 0  # 前一个斐波那契数值
    fib = 0  # 当前斐波那契数值
    total_time = 0  # 总计算时间
    next_time = 0  # 计算下一个斐波那契数所需时间

    while True:
        iteration_start = time.time()  # 开始当前斐波那契数的计时
        fib = fibonacci_recursive(n)  # 递归计算当前斐波那契数
        iteration_time = time.time() - iteration_start  # 计算当前斐波那契数所需时间

        total_time = time.time() - start_time  # 总耗时

        # 检查是否超时
        if total_time + iteration_time > timeout:
            break

        # 更新前一个斐波那契数值、下一个斐波那契数的时间
        prev_fib = fib
        next_time = iteration_time
        n += 1

    return n - 1, prev_fib, round(total_time, 2), round(next_time, 2)

if __name__ == '__main__':
    result = calculate_max_fibonacci_iterative(timeout=30)
    print(f"30秒内最大斐波那契数序号: {result[0]}")
    print(f"对应的斐波那契数值（前100位）: {str(result[2])[:2048]}")
    print(f"耗时: {result[1]:.2f} 秒")
    print(f"计算下一个斐波那契数耗时: {result[3]:.2f} 秒")
